package com.gljx.web.controller.back.power;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.gljx.constant.Constant;
import com.gljx.util.CommonUtil;
import com.gljx.web.Entity.Handle;
import com.gljx.web.Entity.Power;
import com.gljx.web.Entity.Role;
import com.gljx.web.service.PowerService;
import com.gljx.web.service.RoleService;
import com.gljx.web.service.UserService;

@Controller
@RequestMapping("/power")
public class PowerAction {
	
	private  Logger logger = Logger.getLogger(getClass());
	
	@Autowired
	private PowerService powerService;
	
	@Autowired
	private RoleService roleService;
	
	@Autowired
	private UserService userService;

	/**
	 * 依据角色id获取权限
	* @return
	* @author LiXiang  @date 2017年11月8日 上午9:23:36
	 */
	@RequestMapping("/handlelist.action")
	@ResponseBody
    public List<Map<String, Object>> handlist(String roleId,String menuName,String name) {
		if(CommonUtil.isSpecialChar_strict(name)){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			name = null;
		}
		if(roleId == null){
			return new ArrayList<Map<String,Object>>();
		}
		return roleService.findHandle(Integer.valueOf(roleId), menuName, Constant.Project_ID, name);//powerService.findHandleById(Constant.Project_ID, Integer.valueOf(id),name);
	}
	
	/**
	 * 指定用户的所有角色和特有权限
	* @param id
	* @return
	* @author LiXiang  @date 2017年11月8日 下午4:16:53
	 */
	@RequestMapping("/userRoleAndPowerList.action")
	@ResponseBody
    public List<Power> handlist(String id) {
		
		return powerService.findSpowerAndRole(Integer.valueOf(id),Constant.Project_ID);
	}
	
	/**
	 * 权限树
	* @return
	* @author LiXiang  @date 2017年11月8日 下午5:15:40
	 */
	@RequestMapping("/userPowerTree.action")
	@ResponseBody
    public List<Power> userPowerTree(String userId) {
		
		return powerService.findPowerTree(Integer.valueOf(userId), Constant.Project_ID);
	}
	/**
	 * 所有当前角色未有的权限
	* @param rows
	* @param page
	* @param id
	* @param name
	* @return
	* @author LiXiang  @date 2017年11月8日 上午11:47:15
	 */
	@RequestMapping("/allHandList.action")
	@ResponseBody
    public Map<String,Object> allHandList(String rows, 
										String page,
										String id,
										String menuName,
										String name) {
		if(CommonUtil.isSpecialChar_strict(name,menuName)){
			Map <String,Object > dataMap = new HashMap<String, Object>();
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error", "非法字符");
			return dataMap;
		}
		return powerService.selectRoleByProject(rows, page, id, name,menuName);
	}
	/**
	 * 权限分配
	* @author LiXiang  @date 2017年11月1日 下午4:52:46
	 */
	/*@RequestMapping("/look.action")
    public ModelAndView look() {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("/backManage/power_list");
		return mav;
	}
	
	@RequestMapping("/alllist.action")
	@ResponseBody
    public List<Map<String,Object>> alllist(String id,String type) {
		List<Map<String,Object>> powers= powerService.findAllBIUser(id,type);
		return powers;
	}*/
	
	/**
	 * 角色列表
	* @param rows
	* @param page
	* @param userId
	* @param roleName
	* @return
	* @author LiXiang  @date 2017年11月8日 上午11:46:54
	 */
	@RequestMapping("/rolelist.action")
	@ResponseBody
    public Map <String,Object > rolelist(String rows, 
											String page,
											String userId,
											String roleName) {
		if(CommonUtil.isSpecialChar_strict(roleName)){
			Map <String,Object > dataMap = new HashMap<String, Object>();
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error", "非法字符");
			return dataMap;
		}
		return roleService.selectRoleInPower(rows, page, roleName, userId);
		
	}
	/**
	 * 角色管理   关联权限
	* @param ids
	* @param roleId
	* @return
	* @author LiXiang  @date 2017年11月8日 上午11:46:32
	 */
	@RequiresPermissions("/power/roleAddHandle.action")
	@RequestMapping("/roleAddHandle.action")
	@ResponseBody
    public Map <String,Object > roleadd(String ids,String roleId) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		powerService.insertHandleByRoleId(ids, Constant.Project_ID, (Integer.valueOf(roleId)));
		dataMap.put("success", "success");
		return dataMap;
	}
	
	/**
	 * 角色管理  删除权限
	* @param ids
	* @param roleId
	* @return
	* @author LiXiang  @date 2017年11月8日 下午1:47:47
	 */
	@RequiresPermissions("/power/roleDeleteHandle.action")
	@RequestMapping("/roleDeleteHandle.action")
	@ResponseBody
    public Map <String,Object > roledelete(String ids,String roleId) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		powerService.deleteHandleByRoleId(ids, (Integer.valueOf(roleId)));
		dataMap.put("success", "success");
		return dataMap;
	}
	
	/**
	 * 权限管理  为用户添加角色
	* @param ids
	* @param userId
	* @return
	* @author LiXiang  @date 2017年11月9日 下午2:47:32
	 */
	@RequiresPermissions("/power/userDeleteRoleAndPower.action")
	@RequestMapping("/useraddrole.action")
	@ResponseBody
    public Map <String,Object > useraddrole(String ids,String userId) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		powerService.insertRoleByNowUser(ids, Constant.Project_ID, (Integer.valueOf(userId)));
		
		dataMap.put("success", "success");
		return dataMap;
	}
	/**
	 * 权限管理  为用户删除角色或特有权限
	* @param ids
	* @param userId
	* @return
	* @author LiXiang  @date 2017年11月9日 下午2:48:13
	 */
	
	@RequiresPermissions("/power/userDeleteRoleAndPower.action")
	@RequestMapping("/userDeleteRoleAndPower.action")
	@ResponseBody
    public Map <String,Object > userDeleteRoleAndPower(String ids,String userId) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		powerService.deleteRoleAndPower(ids,Integer.valueOf(userId));
		
		dataMap.put("success", "success");
		return dataMap;
	}
	
	/**
	 * 权限管理 添加用户特有权限
	* @param ids
	* @param userId
	* @return
	* @author LiXiang  @date 2017年11月9日 下午4:14:40
	 */
	@RequiresPermissions("/power/userDeleteRoleAndPower.action")
	@RequestMapping("/userAddPower.action")
	@ResponseBody
    public Map <String,Object > userAddPower(String ids,String userId) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		powerService.insertUserPower(ids,Constant.Project_ID,Integer.valueOf(userId));
		
		dataMap.put("success", "success");
		return dataMap;
	}
	
	/**
	 * 权限管理 获取用户未拥有权限
	* @param ids
	* @param userId
	* @return
	* @author LiXiang  @date 2017年11月9日 下午3:09:05
	 */
	@RequestMapping("/powerlist.action")
	@ResponseBody
    public List<Map<String, Object>> powerlist(String userId,
											   String name,
											   String menuName) {
		if(CommonUtil.isSpecialChar_strict(menuName,name)){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			return new ArrayList<Map<String,Object>>();
		}
		if(userId == null){
			return new ArrayList<Map<String,Object>>();
		}
		return userService.findHandle(Integer.valueOf(userId), menuName, Constant.Project_ID, name);
	}
	/**
	 * 批量添加角色
	* @return
	* @author LiXiang  @date 2017年11月21日 下午2:57:16
	 */
	@RequiresPermissions("/power/usersaddroles.action")
	@RequestMapping("/usersaddroles.action")
	@ResponseBody
    public Map <String,Object > powerlist(String userIds, 
											String roleIds) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		if(CommonUtil.isSpecialChar_simple(userIds,roleIds)){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error", "非法字符");
			return dataMap;
		}
		dataMap.put("success", powerService.InserUsersAddRoles(userIds, roleIds));
		return dataMap;
	}
	
}
